package Boot.test.Controller;


import Boot.test.Domain.Result;
import Boot.test.Server.ServerMongoDB;
import Boot.test.Utils.Code;
import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.SCPClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.UUID;


@RestController

public class Upload {

    @Autowired
    ServerMongoDB serverMongoDB;

    //文件上传路径
    private String fileSavePath = "/File";
    private String path = "/Upload";
    //文件访问路径
    private String fileComingPath = "http://47.92.193.251:1022";


    //    文件上传
    @PostMapping("/Upload")
    public Result Upload(@RequestParam("file") MultipartFile[] upload, HttpServletRequest request) throws IOException {
        Connection conn = new Connection("47.92.193.251"); // 获取服务器
        conn.connect(); // 连接服务器
        boolean b = conn.authenticateWithPassword("root",
                "842116ZKYzky"); // 输入账号和密码登录服务器
        if(b){
//            String realPath=
//                    request.getSession().getServletContext().getRealPath(fileSavePath); // 创建一个临时路径
            String realPath=path; // 创建一个临时路径
            File file = new File(realPath);  // 通过临时路径创建临时文件夹
            // 判断文件夹是否创建成功
            if(file.mkdir()){
                // 文件夹创建成功
                // 循环文件
                String[] strings = new String[upload.length];
                int i = 0;
                for (MultipartFile files : upload ){
                    // 生成六位数新文件名
                    String uuid =
                            UUID.randomUUID().toString().replaceAll(
                                    "[^0-9]","").substring(0, 6);
                    // 获取文件后缀名
                    String split =
                            files.getOriginalFilename().split("\\.")[1];
                    //图片新的名字
                    String newImgName=uuid+"."+split;
                    // 在创建的临时文件夹中生成文件
                    files.transferTo(new File(file,newImgName));
                    // 将生成的图片上传到文件服务器中
                    SCPClient sc = new SCPClient(conn);
                    // 文件上传三要素=》路径/上传服务器地址/上传到服务器后的访问等级
                    sc.put(realPath+"\\"+newImgName, "/File","0777");
                    strings[i]=fileComingPath+"/"+newImgName;
                    i++;
                }

                // 上传成功之后删除文件夹
                deleteFile(file);
                return new Result(Code.Success.getValue(), "上传成功",strings);
            }else{
                // 文件夹成功失败
                return new Result(Code.Error.getValue(), "文件上传失败");
            }

        }else{
            // 登录失败
            return new Result(Code.Error.getValue(), "服务器内部异常");
        }
    }



    // 用于递归删除文件
    public static Boolean deleteFile(File file) {
        //判断文件不为null或文件目录存在
        if (file == null || !file.exists()) {
            return false;
        }
        //获取目录下子文件
        File[] files = file.listFiles();
        //遍历该目录下的文件对象
        for (File f : files) {
            //判断子目录是否存在子目录,如果是文件则删除
            if (f.isDirectory()) {
                //递归删除目录下的文件
                deleteFile(f);
            } else {
                //文件删除
                f.delete();
                //打印文件名
            }
        }
        //文件夹删除
        file.delete();
        return true;
    }

}
